package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.Device;
import org.apache.ibatis.annotations.Select;

/**
 * 设备管理Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-06
 */
public interface DeviceMapper 
{
    /**
     * 查询设备管理
     * 
     * @param deviceId 设备管理主键
     * @return 设备管理
     */
    public Device selectDeviceByDeviceId(Integer deviceId);

    /**
     * 查询设备管理列表
     * 
     * @param device 设备管理
     * @return 设备管理集合
     */
    public List<Device> selectDeviceList(Device device);

    /**
     * 新增设备管理
     * 
     * @param device 设备管理
     * @return 结果
     */
    public int insertDevice(Device device);

    /**
     * 修改设备管理
     * 
     * @param device 设备管理
     * @return 结果
     */
    public int updateDevice(Device device);

    /**
     * 删除设备管理
     * 
     * @param deviceId 设备管理主键
     * @return 结果
     */
    public int deleteDeviceByDeviceId(Integer deviceId);

    /**
     * 批量删除设备管理
     * 
     * @param deviceIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDeviceByDeviceIds(Integer[] deviceIds);

    List<Device> selectDeviceByRoomId(Long roomId);

    /**
     * 查询设备列表（包含会议室信息）
     */
    @Select("<script>" +
            "select d.*, r.room_address " +
            "from device d " +
            "left join room r on d.room_id = r.room_id " +
            "WHERE 1=1 " +
            "<if test='deviceNum != null and deviceNum != \"\"'>" +
            "  AND d.device_num = #{deviceNum} " +
            "</if>" +
            "<if test='deviceName != null and deviceName != \"\"'>" +
            "  AND d.device_name like concat('%', #{deviceName}, '%') " +
            "</if>" +
            "<if test='deviceType != null and deviceType != \"\"'>" +
            "  AND d.device_type = #{deviceType} " +
            "</if>" +
            "<if test='roomId != null'>" +
            "  AND d.room_id = #{roomId} " +
            "</if>" +
            "<if test='status != null and status != \"\"'>" +
            "  AND d.status = #{status} " +
            "</if>" +
            "order by d.device_id" +
            "</script>")
    public List<Device> selectDeviceListWithRoom(Device device);

}
